package com.base.common.persistence;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;

/**
 * MyBatis 基础 DAO 接口
 * @author tcq
 * @author v 1.0
 * @date 2018年7月27日 下午1:50:08
 */
@Mapper
public interface BaseMapper<T> {

    <PK> T findById(PK id);

    List<T> findAll();

    @SuppressWarnings("unchecked")
    <PK> List<T> findByIds(PK... ids);

    List<T> findByEntity(T entity);

    List<T> findByEntityWithPage(T entity, Pagination page);

    List<T> findByParam(Object param);

    List<T> findByParamWithPage(Object param, Pagination page);

    @SuppressWarnings("unchecked")
    //@MapKey("id")
    <PK> Map<PK, T> findMap(PK... ids);

    void insert(T entity);

    void update(T entity);

    void updateIfPossible(T entity);

    @SuppressWarnings("unchecked")
    <PK> void delete(PK... ids);

}